package com.shop.dao;

import java.io.Serializable;
import java.util.List;

public interface Hibernate4BaseDao<T>
{
	/**
	 * 
	 * 保存一个实体
	 * @param entity
	 * @return
	 */
	
		public Serializable save(T entity);
		/**
		 * 
		 * 
		 *删除一个实体
		 * @param entity
		 */
		public void delete (T entity);
		/**
		 * 根据id删除实体
		 * 
		 * @param clazz 
		 * @param id
		 */
		public void delete (Class<T> clazz,Serializable id);
		/**
		 * 更新一个实体
		 * 
		 * @param entity
		 */
	    public void update(T entity);
	    /**
	     * 根据一个id查询实体
	     * @param clazz
	     * @param id
	     * @return
	     */
		public T get(Class<T> clazz,Serializable id);
		/**
		 * 找出所有的实体
		 * 
		 * @param clazz
		 * @return
		 */
		public List<T>findAll(Class<T> clazz);
		 /**
		  * 根据条件查找
		  * @param clazz
		  * @param where
		  * @return
		  */
		public List<T>find(Class<T> clazz,String where);
		/**
		 * 
		 * 跟据hql语句查找实体对象
		 * @param hql
		 * @param params
		 * @return
		 */
        public List<T>find(String hql,Object[] params);
/**
 * 根据hql语句查找实体
 *         
 * @param hql
 * @param list
 * @return
 */
        public List<T>find(String hql,List list);
        /**
         * 
         * 分页查询根据hql和参数查找
         * @param hql
         * @param params
         * @param page  第几页            
         * @param rows   每页的页数    
         * @return
         */
        public List<T>find(String hql,Object[] params,Integer page,Integer rows);
        /**
         * 
         * @param hql
         * @param list
         * @param page
         * @param rows
         * @return
         */
	    public List<T>find (String hql,List list,Integer page,Integer rows);
	   /**
	    * 查询记录数主要用于分页时用
	    * @param hql
	    * @return
	    */
	    public long count (String hql);
	    /**
	     * 查询记录数主要用于分页时用
	     * 
	     * @param hql
	     * @param params
	     * @return
	     */
	    public long count (String hql,Object[]params);
	  /**
	   * 
	   * 查询记录条数
	   * @param hql
	   * @param list
	   * @return
	   */
	    public long count(String hql,List list);
	    /**
	     * 批量操作
	     * @param hql
	     * @return
	     */
        public  Integer excuteHql(String hql);
        /**
         * 
         * 
         * @param hql
         * @param params
         * @return
         */
        public Integer excuteHql (String hql,Object[]params);
        /**
         * 
         * 
         * @param hql
         * @param list
         * @return
         */
	    public  Integer excuteHql(String hql,List list);
}
